/*
 * @author Sawyer(870756077@qq.com)
 */
import * as types from '../mutation-types'
import sidebarMenu from './sidebar-menu'

import util from '@/utils/util'

let state = {
    /**
     * 是否需要页面切换动画
     *
     * @type {Boolean}
     */
    needPageTransition: true,

    /**
     * 多个页面是否处于切换中
     *
     * @type {Boolean}
     */
    isPageSwitching: false,

    /**
     * 多个页面切换效果名称
     *
     * @type {String}
     */
    pageTransitionName: '',

    /**
     * 上个页面 scroll 的信息
     *
     * @type {Object}
     */
    historyPageScrollTop: {}
}

let actions = {}

let mutations = {}

export default {
    namespaced: true,
    actions,
    mutations,
    state,
    modules: {
        adminHeader: {
            namespaced: true,
            state: {
                /**
                 * 用户信息
                 *
                 * @type {Object}
                 */
                userInfo: {
                    /**
                     * 用户头像
                     *
                     * @type {String}
                     */
                    avatar: '',
                    /**
                     * 用户名
                     *
                     * @type {String}
                     */
                    userName: ''
                },
                /**
                 * 下拉菜单
                 *
                 * @type {Array.<Object>}
                 */
                children: [
                    {
                        /**
                         * 名称
                         *
                         * @type {String}
                         */
                        title: '个人信息',
                        /**
                         * 路由地址
                         *
                         * @type {String}
                         */
                        path: ''
                    },
                    {
                        title: '修改密码',
                        path: ''
                    },
                    {
                        title: '退出',
                        path: ''
                    }
                ],
                /**
                 * 是否显示头部
                 *
                 * @type {Boolean}
                 */
                showHeader: false,
                /**
                 * 面包屑导航
                 *
                 * @type {Array.<Object>}
                 */
                breadcrumb: []
            },
            actions: {
                /**
                 * 赋值面包屑导航
                 *
                 * @param {Array.<String>} routeName
                 */
                setBreadcrumb({ commit, rootState }, { routeName }) {
                    let menu = rootState.adminShell.adminSidebar.menu
                    let breadcrumb = util.getBreadcrumb(menu, routeName)
                    commit(types.SET_BREADCRUMB, { breadcrumb })
                }
            },
            mutations: {
                /**
                 * 显示隐藏头部面包屑导航
                 *
                 * @param {Boolean} bShow
                 */
                [types.SHOW_ADMIN_HEADER](state, { bShow }) {
                    state.showHeader = bShow
                },
                /**
                 * 赋值面包屑导航
                 *
                 * @param {Array.<Object>} breadcrumb
                 */
                [types.SET_BREADCRUMB](state, { breadcrumb }) {
                    state.breadcrumb = breadcrumb
                }
            }
        },
        /**
         * 左侧侧边栏数据
         *
         * @type {Object}
         */
        adminSidebar: {
            namespaced: true,
            state: {
                /**
                 * big or small
                 *
                 * @type {String}
                 */
                show: 'big',
                /**
                 * 滑动的方向
                 *
                 * @type {String}
                 */
                slideFrom: 'left',
                /**
                 * logo 图片
                 *
                 * @type {String}
                 */
                logo: '@/assets/images/logo.png',
                /**
                 * aside width 侧边栏宽度
                 *
                 * @type {String}
                 */
                asideWidth: '200px',
                /**
                 * 侧边栏菜单列表
                 *
                 * @type {Array.<Object>}
                 */
                menu: sidebarMenu
            },
            actions: {},
            mutations: {}
        },
        /**
         * 遮罩层
         */
        adminMask: {
            namespaced: true,
            state: {
                /**
                 * 显示隐藏遮罩层
                 */
                bShow: false,
                /**
                 * 遮罩层背景颜色
                 */
                bgColor: 'rgba(0, 0, 0, 0.6)'
            },
            actions: {
                /**
                 * 显示或隐藏mask遮罩层
                 * @param {Funciton} commit
                 * @param {Object} o - bShow, bgColor
                 */
                showMask({ commit }, o) {
                    commit(types.SHOW_MASK, o)
                }
            },
            mutations: {
                [types.SHOW_MASK](state, { bShow, bgColor }) {
                    state.bShow = bShow
                    if (bgColor) {
                        state.bgColor = bgColor
                    } else {
                        state.bgColor = 'rgba(0, 0, 0, 0.6)'
                    }
                }
            }
        },
        /**
         * 帮助服务
         */
        adminHelper: {
            namespaced: true,
            state: {
                /**
                 * 显示隐藏右侧帮助服务
                 *
                 * @type {Boolean}
                 */
                bShow: false,
                /**
                 * 宽
                 *
                 * @type {String}
                 */
                helperWidth: '220px'
            },
            mutations: {
                /**
                 * 显示或隐藏右侧帮助服务
                 * @param {Boolean} bShow
                 */
                [types.SHOW_ADMIN_HELPER](state, { bShow }) {
                    state.bShow = bShow
                }
            }
        },
        /**
         * 底部
         */
        adminFooter: {
            namespaced: true,
            state: {
                /**
                 * 宽
                 *
                 * @type {String}
                 */
                footerHeight: '50px'
            }
        }
    }
}
